import { Controller } from 'egg'

export default class HomeController extends Controller {
  public async getSessionCsrfToken() {
    const { ctx } = this
    console.log('ctx.session---', ctx.session.csrfToken)
    ctx.body = {
      code: 200,
      msg: 'OK',
      data: {
        csrfToken: ctx.session.csrfToken,
      },
    }
  }
  public async login() {
    const { ctx, app } = this
    const { jwt, config } = app
    const userInfo = ctx.request.body || {}
    const token = jwt.sign(userInfo, config.jwt.secret, { expiresIn: '18000s' })
    ctx.body = {
      code: '200',
      data: { token },
      msg: 'OK',
    }
  }
  public async getUserInfo() {
    const { ctx } = this
    ctx.body = {
      code: '200',
      data: ctx.userInfo,
      msg: 'OK',
    }
  }
  // 查询用户列表
  public async getUsers() {
    const { ctx } = this
    const users = await ctx.service.user.findUsers()
    ctx.emit(200, users)
  }
  // 创建用户信息
  public async addUser() {
    const { ctx } = this
    const userInfo = ctx.request.body || {}
    const res = await ctx.service.user.addUser(userInfo)
    ctx.emit(200, res)
  }
  // 修改用户信息  将buding 改成newbuding
  public async updataUserInfo() {
    const { ctx } = this
    const updataInfo = ctx.request.body || {}
    // 这里需要判断是否本人
    const oldName = updataInfo.oldName
    const userName = ctx.userInfo.userName
    if (oldName !== userName) {
      return ctx.throw('00', { msg: '抱歉！仅支持修改本人信息' })
    }

    const res = await ctx.service.user.updataUser(updataInfo)
    ctx.emit(200, res)
  }
  // 删除用户信息
  public async delUser() {
    const { ctx } = this
    const payload = ctx.request.body || {}
    // TODO 正常业务中是不允许轻易删除用户信息的，所以一般需要交验权限比如判断token是否是超级管理员等
    const id = payload.id
    if (!id) {
      return ctx.throw('00', { msg: '缺少必要参数ID' })
    }
    const res = await ctx.service.user.delUser(id)
    ctx.emit(200, res)
  }
  // 批量添加用户数据
  public async bulkCreate() {
    const { ctx } = this
    // 为了能添加多条数据，我这里就写死了，不用前端传过来
    const users: any[] = []
    for (let index = 0; index < 20; index++) {
      users.push({
        user_name: `buding_${index}`,
        password: `123456${index}`,
      })
    }
    const res = await ctx.service.user.bulkCreate(users)
    ctx.emit(200, res)
  }
  // 分页查询
  public async getUserPage() {
    const { ctx } = this
    // page是当前页数  pageSize 是一页的数量
    const { page = '1', pageSize = '10' } = ctx.request.body || {}

    //  因为前端返回回来可能是字符串 所以转一下类型
    const res = await ctx.service.user.getUserPage({
      page: Number(page),
      pageSize: Number(pageSize),
    })
    ctx.emit(200, res)
  }
  // 获取订单列表，查询关联商品数据
  public async getOrderList() {
    const { ctx } = this
    // page是当前页数  pageSize 是一页的数量
    const { page = '1', pageSize = '10' } = ctx.request.body || {}

    //  因为前端返回回来可能是字符串 所以转一下类型
    const res = await ctx.service.order.getOrderList({
      page: Number(page),
      pageSize: Number(pageSize),
    })
    ctx.emit(200, res)
  }
}
